from django.db import models
from django.utils import timezone


# Create your models here.
# 第一类数据：违规词库（存放所有不能出现的词）
class Violation(models.Model):
    # 违规词类型：用数字对应中文，方便存储和查询
    WORD_TYPE_CHOICES = (
        (1, "虚假招聘"),  # 比如“高薪日结”“刷单”
        (2, "涉政敏感"),  # 比如敏感政治词汇
        (3, "色情低俗"),  # 比如色情相关词汇
        (4, "暴力违法"),  # 比如暴力、吸毒相关词汇
        (5, "广告引流"),  # 比如“扫码进群”“微商”
    )
    # 违规词本身（比如“高薪日结”），max_length=100限制词的长度，unique=True表示不能重复
    word = models.CharField(max_length=100, unique=True, verbose_name="违规词")
    # 违规词类型（关联上面的WORD_TYPE_CHOICES）
    word_type = models.SmallIntegerField(choices=WORD_TYPE_CHOICES, verbose_name="违规词类型")
    # 状态：1=启用（生效），0=禁用（暂时不用），默认启用
    status = models.SmallIntegerField(default=1, choices=((1, "启用"), (0, "禁用")), verbose_name="状态")
    # 创建时间（自动记录，不用手动填）
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    # 更新时间（自动更新，不用手动填）
    update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")

    # 数据库表的配置：表名、显示名称
    class Meta:
        db_table = "sys_illegal_word"  # 数据库里的表名
        verbose_name = "违规词"  # Django后台显示的名称
        verbose_name_plural = "违规词库"  # 复数形式

    # 打印对象时显示的内容（方便调试）
    def __str__(self):
        return f"{self.get_word_type_display()}: {self.word}"  # 比如“虚假招聘：高薪日结”

    # 第二类数据：审核记录（每次审核都要记下来，方便后续查）

# 第二类数据：审核记录（每次审核都要记下来，方便后续查）
class JobAuditRecord(models.Model):
    # 审核结果：0=待审核，1=合规，2=违规，3=可疑
    AUDIT_RESULT_CHOICES = (
        (0, "待审核"),
        (1, "合规"),
        (2, "违规"),
        (3, "可疑（需人工复核）"),
    )
    job_id = models.BigIntegerField(verbose_name="职位ID")  # 哪个职位的审核
    company_id = models.BigIntegerField(verbose_name="企业ID")  # 哪个企业发布的
    job_title = models.CharField(max_length=200, verbose_name="职位标题")  # 职位标题
    job_description = models.TextField(verbose_name="职位描述")  # 职位描述
    audit_content = models.TextField(verbose_name="实际审核内容（标题+描述）")  # 拼接后的文本
    illegal_words = models.CharField(max_length=500, null=True, blank=True,
                                     verbose_name="命中的违规词（逗号分隔）")  # 比如“高薪日结,刷单”
    word_types = models.CharField(max_length=100, null=True, blank=True,
                                  verbose_name="违规词类型（逗号分隔）")  # 比如“虚假招聘,广告引流”
    audit_result = models.SmallIntegerField(choices=AUDIT_RESULT_CHOICES, default=0, verbose_name="审核结果")  # 审核结果
    audit_time = models.DateTimeField(default=timezone.now, verbose_name="审核时间")  # 审核时间
    audit_ip = models.GenericIPAddressField(null=True, blank=True, verbose_name="审核请求IP")  # 谁发起的请求

    class Meta:
        db_table = "job_audit_record"  # 数据库表名
        verbose_name = "职位审核记录"
        verbose_name_plural = "职位审核记录"
        indexes = [  # 索引：加快查询速度（比如按职位ID查记录）
            models.Index(fields=["job_id"]),
            models.Index(fields=["audit_result"]),
            models.Index(fields=["audit_time"]),
        ]

    def __str__(self):
        return f"职位ID:{self.job_id} - {self.get_audit_result_display()}"  # 比如“职位ID:10001 - 违规”